home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / Auto Brows24324892001.psc / mdlParseCode.bas < prev    next >
Encoding:
BASIC Source File  |  2001-08-08  |  5.9 KB  |  146 lines

  1. Attribute VB_Name = "mdlParseCode"
  2. 'Based on code written by Jameson Schriber
  3.  
  4. Option Explicit
  5.  
  6. Public Sub ParseCode(Code As String)
  7.     
  8.     Dim UserCodeArray() As String
  9.     Dim ArgumentsArray() As String
  10.     Dim UserCode As String
  11.     Dim LineFunction As String
  12.     Dim LineArguments As String
  13.     Dim UserLines As Integer
  14.     Dim LeftParenthesisPos As Integer
  15.     Dim RightParenthesisPos  As Integer
  16.     Dim LineLength As Integer
  17.     Dim i, n As Integer
  18.     'Dim doc as a MS HTML Object Library
  19.     Dim doc As HTMLDocument
  20.        
  21.     'Set doc as browser doc
  22.     Set doc = frmBrowser.wbBrowser.Document
  23.     
  24.     'Preparing the code
  25.     UserCode = BackslashEscape(Code)
  26.  
  27.     'Splitting the code, an array element for each command and its arguments
  28.     UserCodeArray() = Split(UserCode, ";")
  29.  
  30.     'Finding number of commands
  31.     UserLines = UBound(UserCodeArray)
  32.     
  33.     ReDim Preserve UserCodeArray(UserLines - 1)
  34.     For i = 0 To UserLines - 1
  35.         'The guts of the parsing/processing routine, pretty self-explanatory
  36.         LineLength = Len(UserCodeArray(i))
  37.         LeftParenthesisPos = InStr(UserCodeArray(i), "(")
  38.         RightParenthesisPos = InStrRev(UserCodeArray(i), ")")
  39.         LineFunction = Left(UserCodeArray(i), LeftParenthesisPos - 1)
  40.         LineArguments = Mid(UserCodeArray(i), LeftParenthesisPos + 1, RightParenthesisPos - (LeftParenthesisPos + 1))
  41.         
  42.         'THE COMMAND SELECT-CASE BLOCK
  43.         'Each command has it's own case statement
  44.         'Arguments are accessible through LineArguments string
  45.         Select Case UCase(LineFunction)
  46.         
  47.         Case "BROWSE"
  48.             'Split arguments
  49.             ArgumentsArray = Split(LineArguments, ",")
  50.             'Check for correct arguments
  51.             If UBound(ArgumentsArray) <> 0 Then
  52.                 MsgBox "Command: '" & LineFunction & "' needs 1 arguments", vbOKOnly, "Syntax Error"
  53.             Else
  54.                 'Convert characters back and remove quotes
  55.                 ArgumentsArray(0) = ConvertEscapeCharsBack(ArgumentsArray(0))
  56.                 ArgumentsArray(0) = Replace(ArgumentsArray(0), """", "")
  57.             
  58.                 'Browse to URL
  59.                 frmBrowser.wbBrowser.Navigate ArgumentsArray(0)
  60.             End If
  61.         Case "SETINPUTFIELD"
  62.             'Split arguments
  63.             ArgumentsArray = Split(LineArguments, ",")
  64.             'Check for correct arguments
  65.             If UBound(ArgumentsArray) <> 2 Then
  66.                 MsgBox "Command: '" & LineFunction & "' needs 3 arguments", vbOKOnly, "Syntax Error"
  67.             Else
  68.                 'Convert characters back and remove quotes
  69.                 For n = LBound(ArgumentsArray) To UBound(ArgumentsArray)
  70.                     ArgumentsArray(n) = ConvertEscapeCharsBack(ArgumentsArray(n))
  71.                     ArgumentsArray(n) = Replace(ArgumentsArray(n), """", "")
  72.                 Next n
  73.                 'Set input fields
  74.                 SetInputField doc, CInt(ArgumentsArray(0)), ArgumentsArray(1), ArgumentsArray(2)
  75.             End If
  76.         Case "SUBMIT"
  77.             'Spilt arguments
  78.             ArgumentsArray = Split(LineArguments, ",")
  79.             'Check for correct arguments
  80.             If UBound(ArgumentsArray) <> 0 Then
  81.                 MsgBox "Command: '" & LineFunction & "' needs 1 arguments", vbOKOnly, "Syntax Error"
  82.             Else
  83.                 'Submit the form (same result as click the search button)
  84.                 doc.Forms(0).submit
  85.             End If
  86.         Case "MSG"
  87.             'Split arguments
  88.             ArgumentsArray = Split(LineArguments, ",")
  89.             'Check for correct arguments
  90.             If UBound(ArgumentsArray) <> 1 Then
  91.                 MsgBox "Command: '" & LineFunction & "' needs 2 arguments", vbOKOnly, "Syntax Error"
  92.             Else
  93.                 'Send message box
  94.                 MsgBox ArgumentsArray(0), vbOKOnly, ArgumentsArray(1)
  95.             End If
  96.         Case "PRINT"
  97.             'Split arguments
  98.             ArgumentsArray = Split(LineArguments, ",")
  99.             'Check for correct arguments
  100.             If UBound(ArgumentsArray) <> 0 Then
  101.                 MsgBox "Command: '" & LineFunction & "' needs 1 arguments", vbOKOnly, "Syntax Error"
  102.             Else
  103.                 'Print web page, true argument show print dialog, false do not show dialog
  104.                 frmBrowser.PrintWebPage CBool(ArgumentsArray(0))
  105.             End If
  106.         Case Else
  107.             'Message box with error
  108.             MsgBox "Command: '" & LineFunction & "' not a valid command", vbOKOnly, "Script Syntax Error"
  109.         'Case Add more commands here
  110.         End Select
  111.     Next
  112.  
  113. End Sub
  114.  
  115. Public Function BackslashEscape(Code As String) As String
  116.  
  117.     Dim buffer As String
  118.     
  119.     'This function is also a good place to kill all tabs and newlines before we actually start processing the code
  120.     buffer = Replace(Code, vbCrLf, "")
  121.     buffer = Replace(buffer, vbTab, "")
  122.     'Replace all backslash escape characters so that we can process the agruments and convert them back later on
  123.     buffer = Replace(buffer, "\n", Chr(0) & "Newline")
  124.     buffer = Replace(buffer, "\t", Chr(0) & "Tab")
  125.     buffer = Replace(buffer, "\\", Chr(0) & "Backslash")
  126.     buffer = Replace(buffer, "\""", Chr(0) & "Quote")
  127.     buffer = Replace(buffer, "\;", Chr(0) & "Colon")
  128.     BackslashEscape = Replace(buffer, "\,", Chr(0) & "Comma")
  129.     
  130. End Function
  131.  
  132. Public Function ConvertEscapeCharsBack(Code As String) As String
  133.  
  134.     Dim buffer As String
  135.  
  136.     'Convert the "intermediate" escape chars to the actual characters
  137.     buffer = Replace(Code, Chr(0) & "Newline", vbCrLf)
  138.     buffer = Replace(buffer, Chr(0) & "Tab", vbTab)
  139.     buffer = Replace(buffer, Chr(0) & "Backslash", "\")
  140.     buffer = Replace(buffer, Chr(0) & "Quote", """")
  141.     buffer = Replace(buffer, Chr(0) & "Colon", ";")
  142.     buffer = Replace(buffer, Chr(0) & "Comma", ",")
  143.     ConvertEscapeCharsBack = Trim(buffer)
  144.     
  145. End Function
  146.